<!DOCTYPE HTML>
<html lang="en" >
    
    <head>
        
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=11; IE=10; IE=9; IE=8; IE=7; IE=EDGE" />
        <title>下载管理器 | iOS 网络编程</title>
        <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
        <meta name="description" content="">
        <meta name="generator" content="GitBook 2.0.1">
        
        
        <meta name="HandheldFriendly" content="true"/>
        <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
        <meta name="apple-mobile-web-app-capable" content="yes">
        <meta name="apple-mobile-web-app-status-bar-style" content="black">
        <link rel="apple-touch-icon-precomposed" sizes="152x152" href="gitbook/images/apple-touch-icon-precomposed-152.png">
        <link rel="shortcut icon" href="gitbook/images/favicon.ico" type="image/x-icon">
        
    
    
    <link rel="next" href="./nsurlsession-03-webdav.html" />
    
    
    <link rel="prev" href="./nsurlsession-02-download-02-resume_data.html" />
    

        
    </head>
    <body>
        
        
    <link rel="stylesheet" href="gitbook/style.css">
    
    

        
    <div class="book" data-level="0.9.2.3" data-basepath="." data-revision="Fri Jun 12 2015 06:59:00 GMT+0800 (CST)">
    

<div class="book-summary">
    <div class="book-search">
        <input type="text" placeholder="Type to search" class="form-control" />
    </div>
    <ul class="summary">
        
        
        
        

        

        
    
        <li class="chapter " data-level="0" data-path="index.html">
            
                
                    <a href="./index.html">
                        <i class="fa fa-check"></i>
                        
                        网络
                    </a>
                
            
            
            <ul class="articles">
                
    
        <li class="chapter " data-level="0.1" data-path="basic.html">
            
                
                    <a href="./basic.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.1.</b>
                        
                        基本概念
                    </a>
                
            
            
            <ul class="articles">
                
    
        <li class="chapter " data-level="0.1.1" data-path="basic-00-apache.html">
            
                
                    <a href="./basic-00-apache.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.1.1.</b>
                        
                        配置 Apache 服务器
                    </a>
                
            
            
        </li>
    
        <li class="chapter " data-level="0.1.2" data-path="basic-01-http.html">
            
                
                    <a href="./basic-01-http.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.1.2.</b>
                        
                        HTTP
                    </a>
                
            
            
        </li>
    
        <li class="chapter " data-level="0.1.3" data-path="basic-02-dev.html">
            
                
                    <a href="./basic-02-dev.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.1.3.</b>
                        
                        开发方案
                    </a>
                
            
            
        </li>
    
        <li class="chapter " data-level="0.1.4" data-path="basic-03-nsurlconnection.html">
            
                
                    <a href="./basic-03-nsurlconnection.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.1.4.</b>
                        
                        NSURLConnection
                    </a>
                
            
            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="0.2" data-path="socket.html">
            
                
                    <a href="./socket.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.2.</b>
                        
                        socket
                    </a>
                
            
            
            <ul class="articles">
                
    
        <li class="chapter " data-level="0.2.1" data-path="socket-01-basic_code.html">
            
                
                    <a href="./socket-01-basic_code.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.2.1.</b>
                        
                        Socket 基本演练
                    </a>
                
            
            
        </li>
    
        <li class="chapter " data-level="0.2.2" data-path="socket-02-chat.html">
            
                
                    <a href="./socket-02-chat.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.2.2.</b>
                        
                        Socket 聊天
                    </a>
                
            
            
        </li>
    
        <li class="chapter " data-level="0.2.3" data-path="socket-03-baidu.html">
            
                
                    <a href="./socket-03-baidu.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.2.3.</b>
                        
                        Socket 加载百度
                    </a>
                
            
            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="0.3" data-path="serialization.html">
            
                
                    <a href="./serialization.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.3.</b>
                        
                        数据解析
                    </a>
                
            
            
            <ul class="articles">
                
    
        <li class="chapter " data-level="0.3.1" data-path="serialization-01-json.html">
            
                
                    <a href="./serialization-01-json.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.3.1.</b>
                        
                        JSON 解析
                    </a>
                
            
            
            <ul class="articles">
                
    
        <li class="chapter " data-level="0.3.1.1" data-path="json-01-framework.html">
            
                
                    <a href="./json-01-framework.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.3.1.1.</b>
                        
                        JSON 解析第三方框架
                    </a>
                
            
            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="0.3.2" data-path="serialization-03-plist.html">
            
                
                    <a href="./serialization-03-plist.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.3.2.</b>
                        
                        PList解析
                    </a>
                
            
            
        </li>
    
        <li class="chapter " data-level="0.3.3" data-path="serialization-04-xml.html">
            
                
                    <a href="./serialization-04-xml.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.3.3.</b>
                        
                        XML介绍
                    </a>
                
            
            
            <ul class="articles">
                
    
        <li class="chapter " data-level="0.3.3.1" data-path="xml-01-preparation.html">
            
                
                    <a href="./xml-01-preparation.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.3.3.1.</b>
                        
                        准备工作
                    </a>
                
            
            
        </li>
    
        <li class="chapter " data-level="0.3.3.2" data-path="xml-02-parser.html">
            
                
                    <a href="./xml-02-parser.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.3.3.2.</b>
                        
                        解析
                    </a>
                
            
            
        </li>
    
        <li class="chapter " data-level="0.3.3.3" data-path="xml-03-tableview.html">
            
                
                    <a href="./xml-03-tableview.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.3.3.3.</b>
                        
                        绑定表格
                    </a>
                
            
            
        </li>
    
        <li class="chapter " data-level="0.3.3.4" data-path="xml-04-copy_properties.html">
            
                
                    <a href="./xml-04-copy_properties.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.3.3.4.</b>
                        
                        Copy 属性
                    </a>
                
            
            
        </li>
    
        <li class="chapter " data-level="0.3.3.5" data-path="xml-05-refactor.html">
            
                
                    <a href="./xml-05-refactor.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.3.3.5.</b>
                        
                        重构
                    </a>
                
            
            
        </li>
    
        <li class="chapter " data-level="0.3.3.6" data-path="xml-06-dom.html">
            
                
                    <a href="./xml-06-dom.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.3.3.6.</b>
                        
                        DOM 解析
                    </a>
                
            
            
        </li>
    

            </ul>
            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="0.4" data-path="get_&amp;_post.html">
            
                
                    <a href="./get_&amp;_post.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.4.</b>
                        
                        GET &amp; POST
                    </a>
                
            
            
            <ul class="articles">
                
    
        <li class="chapter " data-level="0.4.1" data-path="get_&amp;_post-01-cachedurlresponse.html">
            
                
                    <a href="./get_&amp;_post-01-cachedurlresponse.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.4.1.</b>
                        
                        GET 缓存
                    </a>
                
            
            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="0.5" data-path="user_login.html">
            
                
                    <a href="./user_login.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.5.</b>
                        
                        用户登录
                    </a>
                
            
            
            <ul class="articles">
                
    
        <li class="chapter " data-level="0.5.1" data-path="user_login-01-get&amp;post_login.html">
            
                
                    <a href="./user_login-01-get&amp;post_login.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.5.1.</b>
                        
                        GET &amp; POST 登录
                    </a>
                
            
            
        </li>
    
        <li class="chapter " data-level="0.5.2" data-path="user_login-02-save_&amp;_load_user_info.html">
            
                
                    <a href="./user_login-02-save_&amp;_load_user_info.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.5.2.</b>
                        
                        保存 &amp; 加载用户信息
                    </a>
                
            
            
        </li>
    
        <li class="chapter " data-level="0.5.3" data-path="user_login-03-refactor.html">
            
                
                    <a href="./user_login-03-refactor.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.5.3.</b>
                        
                        代码重构
                    </a>
                
            
            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="0.6" data-path="cipher.html">
            
                
                    <a href="./cipher.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.6.</b>
                        
                        密码学
                    </a>
                
            
            
            <ul class="articles">
                
    
        <li class="chapter " data-level="0.6.1" data-path="cipher-01-base64.html">
            
                
                    <a href="./cipher-01-base64.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.6.1.</b>
                        
                        Base64
                    </a>
                
            
            
        </li>
    
        <li class="chapter " data-level="0.6.2" data-path="cipher-02-md5.html">
            
                
                    <a href="./cipher-02-md5.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.6.2.</b>
                        
                        MD5
                    </a>
                
            
            
        </li>
    
        <li class="chapter " data-level="0.6.3" data-path="cipher-03-key_chain.html">
            
                
                    <a href="./cipher-03-key_chain.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.6.3.</b>
                        
                        钥匙串
                    </a>
                
            
            
        </li>
    
        <li class="chapter " data-level="0.6.4" data-path="cipher-04-aes.html">
            
                
                    <a href="./cipher-04-aes.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.6.4.</b>
                        
                        对称加密算法
                    </a>
                
            
            
        </li>
    
        <li class="chapter " data-level="0.6.5" data-path="cipher-05-rsa.html">
            
                
                    <a href="./cipher-05-rsa.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.6.5.</b>
                        
                        非对称加密算法
                    </a>
                
            
            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="0.7" data-path="post_method.html">
            
                
                    <a href="./post_method.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.7.</b>
                        
                        POST增强
                    </a>
                
            
            
            <ul class="articles">
                
    
        <li class="chapter " data-level="0.7.1" data-path="post_method-01-upload_file.html">
            
                
                    <a href="./post_method-01-upload_file.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.7.1.</b>
                        
                        上传单个文件
                    </a>
                
            
            
        </li>
    
        <li class="chapter " data-level="0.7.2" data-path="post_method-02-upload_multi_files.html">
            
                
                    <a href="./post_method-02-upload_multi_files.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.7.2.</b>
                        
                        上传多个文件
                    </a>
                
            
            
        </li>
    
        <li class="chapter " data-level="0.7.3" data-path="post_method_03_restful.html">
            
                
                    <a href="./post_method_03_restful.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.7.3.</b>
                        
                        RESTful设计风格
                    </a>
                
            
            
        </li>
    
        <li class="chapter " data-level="0.7.4" data-path="post_method-04-post_json.html">
            
                
                    <a href="./post_method-04-post_json.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.7.4.</b>
                        
                        POST JSON
                    </a>
                
            
            
        </li>
    
        <li class="chapter " data-level="0.7.5" data-path="post_method-05-post_custom_object.html">
            
                
                    <a href="./post_method-05-post_custom_object.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.7.5.</b>
                        
                        POST 自定义对象
                    </a>
                
            
            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="0.8" data-path="download.html">
            
                
                    <a href="./download.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.8.</b>
                        
                        NSURLConnection下载
                    </a>
                
            
            
            <ul class="articles">
                
    
        <li class="chapter " data-level="0.8.1" data-path="download-01-head_method.html">
            
                
                    <a href="./download-01-head_method.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.8.1.</b>
                        
                        HTTP HEAD方法
                    </a>
                
            
            
        </li>
    
        <li class="chapter " data-level="0.8.2" data-path="download-02-nsurlconnectiondownloaddelegate.html">
            
                
                    <a href="./download-02-nsurlconnectiondownloaddelegate.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.8.2.</b>
                        
                        NSURLConnectionDownloadDelegate
                    </a>
                
            
            
        </li>
    
        <li class="chapter " data-level="0.8.3" data-path="download-03-download_progress.html">
            
                
                    <a href="./download-03-download_progress.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.8.3.</b>
                        
                        下载进度
                    </a>
                
            
            
        </li>
    
        <li class="chapter " data-level="0.8.4" data-path="download-04-nsfilehandle.html">
            
                
                    <a href="./download-04-nsfilehandle.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.8.4.</b>
                        
                        NSFileHandle拼接文件
                    </a>
                
            
            
        </li>
    
        <li class="chapter " data-level="0.8.5" data-path="download-05-nsoutputstream.html">
            
                
                    <a href="./download-05-nsoutputstream.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.8.5.</b>
                        
                        NSOutputStream拼接文件
                    </a>
                
            
            
        </li>
    
        <li class="chapter " data-level="0.8.6" data-path="download-06-resume_download.html">
            
                
                    <a href="./download-06-resume_download.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.8.6.</b>
                        
                        断点续传
                    </a>
                
            
            
        </li>
    
        <li class="chapter " data-level="0.8.7" data-path="download-07-multithread.html">
            
                
                    <a href="./download-07-multithread.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.8.7.</b>
                        
                        多线程
                    </a>
                
            
            
        </li>
    
        <li class="chapter " data-level="0.8.8" data-path="download-08-call_back.html">
            
                
                    <a href="./download-08-call_back.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.8.8.</b>
                        
                        完成回调
                    </a>
                
            
            
        </li>
    
        <li class="chapter " data-level="0.8.9" data-path="download-09-pause_download.html">
            
                
                    <a href="./download-09-pause_download.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.8.9.</b>
                        
                        暂停下载
                    </a>
                
            
            
        </li>
    
        <li class="chapter " data-level="0.8.10" data-path="download-10-progress_view.html">
            
                
                    <a href="./download-10-progress_view.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.8.10.</b>
                        
                        下载进度视图
                    </a>
                
            
            
        </li>
    
        <li class="chapter " data-level="0.8.11" data-path="download-11-download_manager.html">
            
                
                    <a href="./download-11-download_manager.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.8.11.</b>
                        
                        下载管理器
                    </a>
                
            
            
        </li>
    
        <li class="chapter " data-level="0.8.12" data-path="download-12-nsoperation.html">
            
                
                    <a href="./download-12-nsoperation.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.8.12.</b>
                        
                        NSOperation
                    </a>
                
            
            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="0.9" data-path="nsurlsession.html">
            
                
                    <a href="./nsurlsession.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.9.</b>
                        
                        NSURLSession
                    </a>
                
            
            
            <ul class="articles">
                
    
        <li class="chapter " data-level="0.9.1" data-path="nsurlsession-01-common_code.html">
            
                
                    <a href="./nsurlsession-01-common_code.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.9.1.</b>
                        
                        常见代码
                    </a>
                
            
            
        </li>
    
        <li class="chapter " data-level="0.9.2" data-path="nsurlsession-02-download.html">
            
                
                    <a href="./nsurlsession-02-download.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.9.2.</b>
                        
                        下载 &amp; 解压缩
                    </a>
                
            
            
            <ul class="articles">
                
    
        <li class="chapter " data-level="0.9.2.1" data-path="nsurlsession-02-download-01-progress.html">
            
                
                    <a href="./nsurlsession-02-download-01-progress.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.9.2.1.</b>
                        
                        下载进度跟进
                    </a>
                
            
            
        </li>
    
        <li class="chapter " data-level="0.9.2.2" data-path="nsurlsession-02-download-02-resume_data.html">
            
                
                    <a href="./nsurlsession-02-download-02-resume_data.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.9.2.2.</b>
                        
                        断点续传
                    </a>
                
            
            
        </li>
    
        <li class="chapter active" data-level="0.9.2.3" data-path="nsurlsession-02-download-03-download_manager.html">
            
                
                    <a href="./nsurlsession-02-download-03-download_manager.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.9.2.3.</b>
                        
                        下载管理器
                    </a>
                
            
            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="0.9.3" data-path="nsurlsession-03-webdav.html">
            
                
                    <a href="./nsurlsession-03-webdav.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.9.3.</b>
                        
                        WebDav演练
                    </a>
                
            
            
        </li>
    
        <li class="chapter " data-level="0.9.4" data-path="nsurlsession-04-configuration.html">
            
                
                    <a href="./nsurlsession-04-configuration.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.9.4.</b>
                        
                        Configuration
                    </a>
                
            
            
        </li>
    
        <li class="chapter " data-level="0.9.5" data-path="nsurlsession-05-post_upload.html">
            
                
                    <a href="./nsurlsession-05-post_upload.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.9.5.</b>
                        
                        POST 上传
                    </a>
                
            
            
        </li>
    

            </ul>
            
        </li>
    
        <li class="chapter " data-level="0.10" data-path="https.html">
            
                
                    <a href="./https.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.10.</b>
                        
                        HTTPS
                    </a>
                
            
            
        </li>
    
        <li class="chapter " data-level="0.11" data-path="biometrics.html">
            
                
                    <a href="./biometrics.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.11.</b>
                        
                        指纹识别
                    </a>
                
            
            
        </li>
    
        <li class="chapter " data-level="0.12" data-path="appendix.html">
            
                
                    <a href="./appendix.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.12.</b>
                        
                        附录
                    </a>
                
            
            
            <ul class="articles">
                
    
        <li class="chapter " data-level="0.12.1" data-path="appendix-01-archiver_&amp;_unarchiver.html">
            
                
                    <a href="./appendix-01-archiver_&amp;_unarchiver.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.12.1.</b>
                        
                        归档 &amp; 解档
                    </a>
                
            
            
        </li>
    
        <li class="chapter " data-level="0.12.2" data-path="appendix-02-caanimation.html">
            
                
                    <a href="./appendix-02-caanimation.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.12.2.</b>
                        
                        核心动画
                    </a>
                
            
            
        </li>
    
        <li class="chapter " data-level="0.12.3" data-path="appendix-03-kvo.html">
            
                
                    <a href="./appendix-03-kvo.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.12.3.</b>
                        
                        KVO
                    </a>
                
            
            
        </li>
    
        <li class="chapter " data-level="0.12.4" data-path="appendix-04-nil&amp;null.html">
            
                
                    <a href="./appendix-04-nil&amp;null.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.12.4.</b>
                        
                        nil&amp;null&amp;Nil&amp;NSNull
                    </a>
                
            
            
        </li>
    
        <li class="chapter " data-level="0.12.5" data-path="appendix-http_request_field.html">
            
                
                    <a href="./appendix-http_request_field.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.12.5.</b>
                        
                        常用 HTTP 请求字段
                    </a>
                
            
            
        </li>
    
        <li class="chapter " data-level="0.12.6" data-path="appendix-cocoapods.html">
            
                
                    <a href="./appendix-cocoapods.html">
                        <i class="fa fa-check"></i>
                        
                            <b>0.12.6.</b>
                        
                        Cocoapods
                    </a>
                
            
            
        </li>
    

            </ul>
            
        </li>
    

            </ul>
            
        </li>
    


        
        <li class="divider"></li>
        <li>
            <a href="https://www.gitbook.com" target="blank" class="gitbook-link">
                Published with GitBook
            </a>
        </li>
        
    </ul>
</div>

    <div class="book-body">
        <div class="body-inner">
            <div class="book-header">
    <!-- Actions Left -->
    <a href="#" class="btn pull-left toggle-summary" aria-label="Table of Contents"><i class="fa fa-align-justify"></i></a>
    <a href="#" class="btn pull-left toggle-search" aria-label="Search"><i class="fa fa-search"></i></a>
    
    <div id="font-settings-wrapper" class="dropdown pull-left">
        <a href="#" class="btn toggle-dropdown" aria-label="Font Settings"><i class="fa fa-font"></i>
        </a>
        <div class="dropdown-menu font-settings">
    <div class="dropdown-caret">
        <span class="caret-outer"></span>
        <span class="caret-inner"></span>
    </div>

    <div class="buttons">
        <button type="button" id="reduce-font-size" class="button size-2">A</button>
        <button type="button" id="enlarge-font-size" class="button size-2">A</button>
    </div>

    <div class="buttons font-family-list">
        <button type="button" data-font="0" class="button">Serif</button>
        <button type="button" data-font="1" class="button">Sans</button>
    </div>

    <div class="buttons color-theme-list">
        <button type="button" id="color-theme-preview-0" class="button size-3" data-theme="0">White</button>
        <button type="button" id="color-theme-preview-1" class="button size-3" data-theme="1">Sepia</button>
        <button type="button" id="color-theme-preview-2" class="button size-3" data-theme="2">Night</button>
    </div>
</div>

    </div>

    <!-- Actions Right -->
    
    <div class="dropdown pull-right">
        <a href="#" class="btn toggle-dropdown" aria-label="Share"><i class="fa fa-share-alt"></i>
        </a>
        <div class="dropdown-menu font-settings dropdown-left">
            <div class="dropdown-caret">
                <span class="caret-outer"></span>
                <span class="caret-inner"></span>
            </div>
            <div class="buttons">
                <button type="button" data-sharing="twitter" class="button">
                    Share on Twitter
                </button>
                <button type="button" data-sharing="google-plus" class="button">
                    Share on Google
                </button>
                <button type="button" data-sharing="facebook" class="button">
                    Share on Facebook
                </button>
                <button type="button" data-sharing="weibo" class="button">
                    Share on Weibo
                </button>
                <button type="button" data-sharing="instapaper" class="button">
                    Share on Instapaper
                </button>
            </div>
        </div>
    </div>
    

    
    <a href="#" target="_blank" class="btn pull-right google-plus-sharing-link sharing-link" data-sharing="google-plus" aria-label="Google"><i class="fa fa-google-plus"></i></a>
    
    
    <a href="#" target="_blank" class="btn pull-right facebook-sharing-link sharing-link" data-sharing="facebook" aria-label="Facebook"><i class="fa fa-facebook"></i></a>
    
    
    <a href="#" target="_blank" class="btn pull-right twitter-sharing-link sharing-link" data-sharing="twitter" aria-label="Twitter"><i class="fa fa-twitter"></i></a>
    
    

    <!-- Title -->
    <h1>
        <i class="fa fa-circle-o-notch fa-spin"></i>
        <a href="./" >iOS 网络编程</a>
    </h1>
</div>

            <div class="page-wrapper" tabindex="-1">
                <div class="page-inner">
                
                
                    <section class="normal" id="section-">
                    
                        <h1 id="%E4%B8%8B%E8%BD%BD%E7%AE%A1%E7%90%86%E5%99%A8">&#x4E0B;&#x8F7D;&#x7BA1;&#x7406;&#x5668;</h1>
<h2 id="%E5%8D%95%E4%BE%8B%E5%AE%9E%E7%8E%B0">&#x5355;&#x4F8B;&#x5B9E;&#x73B0;</h2>
<ul>
<li><code>.h</code> &#x5B9A;&#x4E49;&#x5168;&#x5C40;&#x8BBF;&#x95EE;&#x65B9;&#x6CD5;</li>
</ul>
<pre><code class="lang-objc">+ (instancetype)sharedDownloadManager;
</code></pre>
<ul>
<li><code>.m</code> &#x5B9E;&#x73B0;</li>
</ul>
<pre><code class="lang-objc"><span class="hljs-class"><span class="hljs-keyword">@interface</span> <span class="hljs-title">DownloadManager</span>() &lt;<span class="hljs-title">NSURLSessionDownloadDelegate</span>&gt;</span>
<span class="hljs-keyword">@property</span> (<span class="hljs-keyword">nonatomic</span>, <span class="hljs-keyword">strong</span>) <span class="hljs-built_in">NSURLSession</span> *session;
<span class="hljs-keyword">@end</span>

<span class="hljs-class"><span class="hljs-keyword">@implementation</span> <span class="hljs-title">DownloadManager</span></span>

+ (instancetype)sharedDownloadManager {
    <span class="hljs-keyword">static</span> DownloadManager *instance;

    <span class="hljs-keyword">static</span> <span class="hljs-built_in">dispatch_once_t</span> onceToken;
    <span class="hljs-built_in">dispatch_once</span>(&amp;onceToken, ^{
        instance = [[<span class="hljs-keyword">self</span> alloc] init];

        <span class="hljs-comment">// &#x5B9E;&#x4F8B;&#x5316;&#x7F51;&#x7EDC;&#x4F1A;&#x8BDD;</span>
        NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
        instance<span class="hljs-variable">.session</span> = [<span class="hljs-built_in">NSURLSession</span> sessionWithConfiguration:config delegate:instance delegateQueue:<span class="hljs-literal">nil</span>];
    });

    <span class="hljs-keyword">return</span> instance;
}

<span class="hljs-keyword">@end</span>
</code></pre>
<h2 id="%E5%AE%9E%E7%8E%B0%E4%BB%A3%E7%90%86%E6%96%B9%E6%B3%95">&#x5B9E;&#x73B0;&#x4EE3;&#x7406;&#x65B9;&#x6CD5;</h2>
<pre><code class="lang-objc">- (<span class="hljs-keyword">void</span>)URLSession:(<span class="hljs-built_in">NSURLSession</span> *)session task:(NSURLSessionTask *)task didCompleteWithError:(<span class="hljs-built_in">NSError</span> *)error {
<span class="hljs-preprocessor">#warning &#x9519;&#x8BEF;&#x56DE;&#x8C03;</span>
}
- (<span class="hljs-keyword">void</span>)URLSession:(<span class="hljs-built_in">NSURLSession</span> *)session downloadTask:(<span class="hljs-built_in">NSURLSessionDownloadTask</span> *)downloadTask didFinishDownloadingToURL:(<span class="hljs-built_in">NSURL</span> *)location {
<span class="hljs-preprocessor">#warning &#x5B8C;&#x6210;&#x56DE;&#x8C03;</span>
    <span class="hljs-built_in">NSLog</span>(<span class="hljs-string">@&quot;%@&quot;</span>, location);
}

- (<span class="hljs-keyword">void</span>)URLSession:(<span class="hljs-built_in">NSURLSession</span> *)session downloadTask:(<span class="hljs-built_in">NSURLSessionDownloadTask</span> *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite {

    <span class="hljs-keyword">float</span> progress = (<span class="hljs-keyword">float</span>)totalBytesWritten / totalBytesExpectedToWrite;
    <span class="hljs-built_in">NSLog</span>(<span class="hljs-string">@&quot;%f %@&quot;</span>, progress, [<span class="hljs-built_in">NSThread</span> currentThread]);
<span class="hljs-preprocessor">#warning &#x8FDB;&#x5EA6;&#x56DE;&#x8C03;</span>
}

- (<span class="hljs-keyword">void</span>)URLSession:(<span class="hljs-built_in">NSURLSession</span> *)session downloadTask:(<span class="hljs-built_in">NSURLSessionDownloadTask</span> *)downloadTask didResumeAtOffset:(int64_t)fileOffset expectedTotalBytes:(int64_t)expectedTotalBytes {
    <span class="hljs-built_in">NSLog</span>(<span class="hljs-string">@&quot;%s&quot;</span>, __FUNCTION__);
}
</code></pre>
<h2 id="%E4%B8%8B%E8%BD%BD%E6%96%B9%E6%B3%95%E5%AE%9E%E7%8E%B0">&#x4E0B;&#x8F7D;&#x65B9;&#x6CD5;&#x5B9E;&#x73B0;</h2>
<ul>
<li>&#x5B9A;&#x4E49;&#x63A5;&#x53E3;&#x65B9;&#x6CD5;</li>
</ul>
<pre><code class="lang-objc"><span class="hljs-comment">///  &#x4E0B;&#x8F7D;&#x6307;&#x5B9A; URL</span>
<span class="hljs-comment">///</span>
<span class="hljs-comment">///  @param url      URL</span>
<span class="hljs-comment">///  @param progress &#x8FDB;&#x5EA6;&#x56DE;&#x8C03;</span>
<span class="hljs-comment">///  @param finished &#x5B8C;&#x6210;&#x56DE;&#x8C03;</span>
- (<span class="hljs-keyword">void</span>)downloadWithURL:(<span class="hljs-built_in">NSURL</span> *)url progress:(<span class="hljs-keyword">void</span> (^)(<span class="hljs-keyword">float</span> progress))progress finished:(<span class="hljs-keyword">void</span> (^)(<span class="hljs-built_in">NSURL</span> *location, <span class="hljs-built_in">NSError</span> *error))finished;
</code></pre>
<ul>
<li>&#x4E0B;&#x8F7D;&#x65B9;&#x6CD5;&#x5B9E;&#x73B0;</li>
</ul>
<pre><code class="lang-objc">- (<span class="hljs-keyword">void</span>)downloadWithURL:(<span class="hljs-built_in">NSURL</span> *)url progress:(<span class="hljs-keyword">void</span> (^)(<span class="hljs-keyword">float</span>))progress finished:(<span class="hljs-keyword">void</span> (^)(<span class="hljs-built_in">NSURL</span> *, <span class="hljs-built_in">NSError</span> *))finished {

    <span class="hljs-comment">// 1. &#x521B;&#x5EFA;&#x4E0B;&#x8F7D;&#x4EFB;&#x52A1;</span>
    <span class="hljs-built_in">NSURLSessionDownloadTask</span> *task = [<span class="hljs-keyword">self</span><span class="hljs-variable">.session</span> downloadTaskWithURL:url];

    <span class="hljs-comment">// 2. &#x542F;&#x52A8;&#x4E0B;&#x8F7D;&#x4EFB;&#x52A1;</span>
    [task resume];
}
</code></pre>
<h2 id="%E6%9B%BF%E6%8D%A2%E4%B8%8B%E8%BD%BD%E6%96%B9%E6%B3%95">&#x66FF;&#x6362;&#x4E0B;&#x8F7D;&#x65B9;&#x6CD5;</h2>
<pre><code class="lang-objc">- (<span class="hljs-keyword">IBAction</span>)start {
<span class="hljs-comment">//    if (self.downloadTask != nil) {</span>
<span class="hljs-comment">//        NSLog(@&quot;&#x6B63;&#x5728;&#x73A9;&#x547D;&#x4E0B;&#x8F7D;&#x4E2D;...&quot;);</span>
<span class="hljs-comment">//        return;</span>
<span class="hljs-comment">//    } else if (self.resumeData != nil) {</span>
<span class="hljs-comment">//        NSLog(@&quot;&#x7EE7;&#x7EED;&#x4E0B;&#x8F7D;&quot;);</span>
<span class="hljs-comment">//</span>
<span class="hljs-comment">//        [self resume];</span>
<span class="hljs-comment">//        return;</span>
<span class="hljs-comment">//    }</span>

    <span class="hljs-built_in">NSURL</span> *url = [<span class="hljs-built_in">NSURL</span> URLWithString:<span class="hljs-string">@&quot;http://dldir1.qq.com/qqfile/QQforMac/QQ_V4.0.2.dmg&quot;</span>];
    [[DownloadManager sharedDownloadManager] downloadWithURL:url progress:^(<span class="hljs-keyword">float</span> progress) {
        <span class="hljs-built_in">NSLog</span>(<span class="hljs-string">@&quot;%f&quot;</span>, progress);
    } finished:^(<span class="hljs-built_in">NSURL</span> *location, <span class="hljs-built_in">NSError</span> *error) {
        <span class="hljs-built_in">NSLog</span>(<span class="hljs-string">@&quot;%@ %@&quot;</span>, location, error);
    }];
}
</code></pre>
<blockquote>
<p>&#x95EE;&#x9898;&#xFF1A;&#x5982;&#x4F55;&#x8BC6;&#x522B;<code>&#x4E0B;&#x8F7D;&#x4EFB;&#x52A1;</code>&#x4EE5;&#x53CA;&#x4E0E;&#x5176;&#x7ED1;&#x5B9A;&#x7684;<code>&#x56DE;&#x8C03;&#x4EE3;&#x7801;</code></p>
</blockquote>
<ul>
<li>&#x89E3;&#x51B3;&#x529E;&#x6CD5;&#x2014;&#x2014;&#x81EA;&#x5B9A;&#x4E49;<code>&#x4E0B;&#x8F7D;&#x4EFB;&#x52A1;&#x56DE;&#x8C03;</code>&#x7C7B;</li>
</ul>
<pre><code class="lang-objc"><span class="hljs-class"><span class="hljs-keyword">@interface</span> <span class="hljs-title">SessionTaskCallBack</span> : <span class="hljs-title">NSObject</span></span>
<span class="hljs-comment">///  &#x8FDB;&#x5EA6;&#x56DE;&#x8C03;&#xFF0C;&#x53EF;&#x9009;</span>
<span class="hljs-keyword">@property</span> (<span class="hljs-keyword">nonatomic</span>, <span class="hljs-keyword">copy</span>) <span class="hljs-keyword">void</span> (^progressBlock)(<span class="hljs-keyword">float</span> progress);
<span class="hljs-comment">///  &#x5B8C;&#x6210;&#x56DE;&#x8C03;</span>
<span class="hljs-keyword">@property</span> (<span class="hljs-keyword">nonatomic</span>, <span class="hljs-keyword">copy</span>) <span class="hljs-keyword">void</span> (^finishedBlock)(<span class="hljs-built_in">NSURL</span> *location, <span class="hljs-built_in">NSError</span> *error);
<span class="hljs-comment">///  &#x7EED;&#x4F20;&#x6570;&#x636E;</span>
<span class="hljs-keyword">@property</span> (<span class="hljs-keyword">nonatomic</span>, <span class="hljs-keyword">strong</span>) <span class="hljs-built_in">NSData</span> *resumeData;
<span class="hljs-keyword">@end</span>

<span class="hljs-class"><span class="hljs-keyword">@implementation</span> <span class="hljs-title">SessionTaskCallBack</span></span>

<span class="hljs-keyword">@end</span>
</code></pre>
<ul>
<li>&#x5B9A;&#x4E49;&#x7F13;&#x51B2;&#x6C60;</li>
</ul>
<pre><code class="lang-objc"><span class="hljs-comment">///  &#x4E0B;&#x8F7D;&#x4EFB;&#x52A1;&#x7F13;&#x51B2;&#x6C60;</span>
<span class="hljs-keyword">@property</span> (<span class="hljs-keyword">nonatomic</span>, <span class="hljs-keyword">strong</span>) <span class="hljs-built_in">NSMutableDictionary</span> *downloadTaskCache;
<span class="hljs-comment">///  &#x4E0B;&#x8F7D;&#x4EFB;&#x52A1;&#x56DE;&#x8C03;&#x7F13;&#x51B2;&#x6C60;</span>
<span class="hljs-keyword">@property</span> (<span class="hljs-keyword">nonatomic</span>, <span class="hljs-keyword">strong</span>) <span class="hljs-built_in">NSMutableDictionary</span> *downloadTaskCallBackCache;
</code></pre>
<ul>
<li>&#x5B9E;&#x73B0;&#x7F13;&#x51B2;&#x6C60;</li>
</ul>
<pre><code class="lang-objc">- (<span class="hljs-built_in">NSMutableDictionary</span> *)downloadTaskCache {
    <span class="hljs-keyword">if</span> (_downloadTaskCache == <span class="hljs-literal">nil</span>) {
        _downloadTaskCache = [<span class="hljs-built_in">NSMutableDictionary</span> dictionary];
    }
    <span class="hljs-keyword">return</span> _downloadTaskCache;
}

- (<span class="hljs-built_in">NSMutableDictionary</span> *)downloadTaskCallBackCache {
    <span class="hljs-keyword">if</span> (_downloadTaskCallBackCache == <span class="hljs-literal">nil</span>) {
        _downloadTaskCallBackCache = [<span class="hljs-built_in">NSMutableDictionary</span> dictionary];
    }
    <span class="hljs-keyword">return</span> _downloadTaskCallBackCache;
}
</code></pre>
<ul>
<li>&#x4FEE;&#x6539;&#x4E0B;&#x8F7D;&#x65B9;&#x6CD5;&#xFF0C;&#x6DFB;&#x52A0;&#x7F13;&#x51B2;&#x6C60;</li>
</ul>
<pre><code class="lang-objc">- (<span class="hljs-keyword">void</span>)downloadWithURL:(<span class="hljs-built_in">NSURL</span> *)url progress:(<span class="hljs-keyword">void</span> (^)(<span class="hljs-keyword">float</span>))progress finished:(<span class="hljs-keyword">void</span> (^)(<span class="hljs-built_in">NSURL</span> *, <span class="hljs-built_in">NSError</span> *))finished {

    <span class="hljs-comment">// 0. &#x5224;&#x65AD;&#x4EFB;&#x52A1;&#x662F;&#x5426;&#x5B58;&#x5728;</span>
    <span class="hljs-keyword">if</span> (<span class="hljs-keyword">self</span><span class="hljs-variable">.downloadTaskCache</span>[url] != <span class="hljs-literal">nil</span>) {
        <span class="hljs-built_in">NSLog</span>(<span class="hljs-string">@&quot;&#x4E0B;&#x8F7D;&#x4EFB;&#x52A1;&#x5DF2;&#x7ECF;&#x5B58;&#x5728;&quot;</span>);
        <span class="hljs-keyword">return</span>;
    }

    <span class="hljs-comment">// 1. &#x521B;&#x5EFA;&#x4E0B;&#x8F7D;&#x4EFB;&#x52A1;</span>
    <span class="hljs-built_in">NSURLSessionDownloadTask</span> *task = [<span class="hljs-keyword">self</span><span class="hljs-variable">.session</span> downloadTaskWithURL:url];

    <span class="hljs-comment">// 2. &#x5C06;&#x4E0B;&#x8F7D;&#x4EFB;&#x52A1;&#x6DFB;&#x52A0;&#x5230;&#x7F13;&#x51B2;&#x6C60;</span>
    [<span class="hljs-keyword">self</span><span class="hljs-variable">.downloadTaskCache</span> setObject:task forKey:url];

    <span class="hljs-comment">// 3. &#x521B;&#x5EFA;&#x4E0B;&#x8F7D;&#x4EFB;&#x52A1;&#x56DE;&#x8C03;&#x7C7B;</span>
    SessionTaskCallBack *callBack = [[SessionTaskCallBack alloc] init];
    <span class="hljs-comment">// 2.1 &#x8BB0;&#x5F55;&#x8FDB;&#x5EA6;&#x56DE;&#x8C03;</span>
    callBack<span class="hljs-variable">.progressBlock</span> = progress;
    <span class="hljs-comment">// 2.2 &#x8BB0;&#x5F55;&#x5B8C;&#x6210;&#x56DE;&#x8C03;</span>
    callBack<span class="hljs-variable">.finishedBlock</span> = finished;

    <span class="hljs-comment">// &#x5C06;&#x4EFB;&#x52A1;&#x56DE;&#x8C03;&#x6DFB;&#x52A0;&#x5230;&#x7F13;&#x51B2;&#x6C60;</span>
    [<span class="hljs-keyword">self</span><span class="hljs-variable">.downloadTaskCallBackCache</span> setObject:callBack forKey:task];

    <span class="hljs-comment">// 4. &#x542F;&#x52A8;&#x4E0B;&#x8F7D;&#x4EFB;&#x52A1;</span>
    [task resume];
}
</code></pre>
<ul>
<li>&#x5B8C;&#x6210;&#x56DE;&#x8C03;</li>
</ul>
<pre><code class="lang-objc">- (<span class="hljs-keyword">void</span>)URLSession:(<span class="hljs-built_in">NSURLSession</span> *)session downloadTask:(<span class="hljs-built_in">NSURLSessionDownloadTask</span> *)downloadTask didFinishDownloadingToURL:(<span class="hljs-built_in">NSURL</span> *)location {
    <span class="hljs-comment">// &#x4ECE;&#x4EFB;&#x52A1;&#x56DE;&#x8C03;&#x7F13;&#x51B2;&#x6C60;&#x83B7;&#x53D6;&#x56DE;&#x8C03;&#x5BF9;&#x8C61;</span>
    SessionTaskCallBack *callBack = <span class="hljs-keyword">self</span><span class="hljs-variable">.downloadTaskCallBackCache</span>[downloadTask];

    <span class="hljs-keyword">if</span> (callBack == <span class="hljs-literal">nil</span>) {
        <span class="hljs-built_in">NSLog</span>(<span class="hljs-string">@&quot;&#x6CA1;&#x6709;&#x4EFB;&#x52A1;&quot;</span>);

        <span class="hljs-keyword">return</span>;
    }
    <span class="hljs-keyword">if</span> (callBack<span class="hljs-variable">.finishedBlock</span> != <span class="hljs-literal">nil</span>) {
        <span class="hljs-built_in">dispatch_async</span>(dispatch_get_main_queue(), ^{
            callBack<span class="hljs-variable">.finishedBlock</span>(location, <span class="hljs-literal">nil</span>);
        });
    }
}
</code></pre>
<ul>
<li>&#x9519;&#x8BEF;&#x56DE;&#x8C03;</li>
</ul>
<pre><code class="lang-objc">- (<span class="hljs-keyword">void</span>)URLSession:(<span class="hljs-built_in">NSURLSession</span> *)session task:(NSURLSessionTask *)task didCompleteWithError:(<span class="hljs-built_in">NSError</span> *)error {

    <span class="hljs-comment">// &#x4ECE;&#x4EFB;&#x52A1;&#x56DE;&#x8C03;&#x7F13;&#x51B2;&#x6C60;&#x83B7;&#x53D6;&#x56DE;&#x8C03;&#x5BF9;&#x8C61;</span>
    SessionTaskCallBack *callBack = <span class="hljs-keyword">self</span><span class="hljs-variable">.downloadTaskCallBackCache</span>[task];

    <span class="hljs-keyword">if</span> (callBack == <span class="hljs-literal">nil</span>) {
        <span class="hljs-built_in">NSLog</span>(<span class="hljs-string">@&quot;&#x6CA1;&#x6709;&#x4EFB;&#x52A1;&quot;</span>);
        <span class="hljs-keyword">return</span>;
    }

    <span class="hljs-keyword">if</span> (callBack<span class="hljs-variable">.finishedBlock</span> != <span class="hljs-literal">nil</span>) {
        <span class="hljs-built_in">dispatch_async</span>(dispatch_get_main_queue(), ^{
            <span class="hljs-keyword">if</span> (error != <span class="hljs-literal">nil</span>) {
                callBack<span class="hljs-variable">.finishedBlock</span>(<span class="hljs-literal">nil</span>, error);
            }
            <span class="hljs-comment">// &#x5220;&#x9664;&#x7F13;&#x5B58;</span>
            [<span class="hljs-keyword">self</span><span class="hljs-variable">.downloadTaskCallBackCache</span> removeObjectForKey:task];
            [<span class="hljs-keyword">self</span><span class="hljs-variable">.downloadTaskCache</span> enumerateKeysAndObjectsUsingBlock:^(<span class="hljs-keyword">id</span> key, <span class="hljs-keyword">id</span> obj, <span class="hljs-built_in">BOOL</span> *stop) {
                <span class="hljs-keyword">if</span> (obj == task) {
                    <span class="hljs-built_in">NSLog</span>(<span class="hljs-string">@&quot;%@&quot;</span>, <span class="hljs-keyword">self</span><span class="hljs-variable">.downloadTaskCache</span>);
                    [<span class="hljs-keyword">self</span><span class="hljs-variable">.downloadTaskCache</span> removeObjectForKey:key];
                    *stop = <span class="hljs-literal">YES</span>;
                }
            }];
        });
    }
}
</code></pre>
<ul>
<li>&#x8FDB;&#x5EA6;&#x56DE;&#x8C03;</li>
</ul>
<pre><code class="lang-objc">- (<span class="hljs-keyword">void</span>)URLSession:(<span class="hljs-built_in">NSURLSession</span> *)session downloadTask:(<span class="hljs-built_in">NSURLSessionDownloadTask</span> *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite {

    <span class="hljs-comment">// &#x4ECE;&#x4EFB;&#x52A1;&#x56DE;&#x8C03;&#x7F13;&#x51B2;&#x6C60;&#x83B7;&#x53D6;&#x56DE;&#x8C03;&#x5BF9;&#x8C61;</span>
    SessionTaskCallBack *callBack = <span class="hljs-keyword">self</span><span class="hljs-variable">.downloadTaskCallBackCache</span>[downloadTask];

    <span class="hljs-keyword">if</span> (callBack == <span class="hljs-literal">nil</span>) {
        <span class="hljs-built_in">NSLog</span>(<span class="hljs-string">@&quot;&#x6CA1;&#x6709;&#x4EFB;&#x52A1;&quot;</span>);

        <span class="hljs-keyword">return</span>;
    }

    <span class="hljs-keyword">if</span> (callBack<span class="hljs-variable">.progressBlock</span> != <span class="hljs-literal">nil</span>) {
        <span class="hljs-keyword">float</span> progress = (<span class="hljs-keyword">float</span>)totalBytesWritten / totalBytesExpectedToWrite;
        callBack<span class="hljs-variable">.progressBlock</span>(progress);
    }
}
</code></pre>
<h2 id="%E6%9A%82%E5%81%9C-%E7%BB%A7%E7%BB%AD">&#x6682;&#x505C;&amp;&#x7EE7;&#x7EED;</h2>
<pre><code class="lang-objc">- (<span class="hljs-keyword">void</span>)pause:(<span class="hljs-built_in">NSURL</span> *)url {
    NSURLSessionTask *task = <span class="hljs-keyword">self</span><span class="hljs-variable">.downloadTaskCache</span>[url];

    <span class="hljs-keyword">if</span> (task<span class="hljs-variable">.state</span> == NSURLSessionTaskStateRunning) {
        [task suspend];
    }
}

- (<span class="hljs-keyword">void</span>)resume:(<span class="hljs-built_in">NSURL</span> *)url {
    NSURLSessionTask *task = <span class="hljs-keyword">self</span><span class="hljs-variable">.downloadTaskCache</span>[url];

    <span class="hljs-keyword">if</span> (task<span class="hljs-variable">.state</span> == NSURLSessionTaskStateSuspended) {
        [task resume];
    }
}
</code></pre>

                    
                    </section>
                
                
                </div>
            </div>
        </div>

        
        <a href="./nsurlsession-02-download-02-resume_data.html" class="navigation navigation-prev " aria-label="Previous page: 断点续传"><i class="fa fa-angle-left"></i></a>
        
        
        <a href="./nsurlsession-03-webdav.html" class="navigation navigation-next " aria-label="Next page: WebDav演练"><i class="fa fa-angle-right"></i></a>
        
    </div>
</div>

        
<script src="gitbook/app.js"></script>

<script>
require(["gitbook"], function(gitbook) {
    var config = {"fontSettings":{"theme":null,"family":"sans","size":2}};
    gitbook.start(config);
});
</script>

        
    </body>
    
</html>
